Kubernetes Basics

David Alberto Montaño Fetecua

Objetivos

  • Entender beneficios de usar Kubernetes
  • Conocer su arquitectura
  • Conocer recursos más relevantes
  • Saber qué pasos seguir para empezar

Agenda

  • Contexto
  • ¿Qué es Kubernetes?
  • Arquitectura de Kubernetes
  • Algunos Recursos del API
  • Algunos Comandos
  • Siguientes Pasos

Contexto

Escenarios Diferentes

Procesos de DevOps

  • Despliegues - Rollbacks
  • Administración de Estado Distribuido
  • Aprovisionamiento de Ambientes
    • Dev - Pruebas - Carga - Seguridad
  • Escalabilidad
  • Monitoreo
  • Lógica de Autocuración
  • Seguridad
  • Administración de la Configuración
  • … como código o documentado

¿Qué es Kubernetes?

Abstracciones

The essence of abstractions is preserving information that is relevant in a given context, and forgetting information that is irrelevant in that context.

– John V. Guttag

  • interfaces de programación - APIs
  • Sistema Operativo - Docker

Kubernetes

  • Plataforma de administración de aplicaciones y servicios “containerizados” (CRI)
    • código abierto
    • configuración declarativa de estado y comportamiento
    • facilita instalación y monitoreo de aplicaciones distribuidas

Beneficios

  • velocidad
  • escalabilidad
  • abstracción de infraestructura
  • eficiencia

Provee

  • “Descubrimiento” de Servicios y Balanceo de Carga
  • Interfaces de Almacenamiento
  • Despliegues y Reversiones automáticas
  • Asignación automatizada de trabajo a nodos
  • Lógica de Auto Curación
  • Administración de Configuración y Secretos

Tipos de Usuarios y Procesos

  • operadores
    • instalación
    • mantenimiento (100s) de cluster(s)
    • configuración de clusters
      • redes - almacenamiento
  • usuarios del API de k8s (desarrolladores, qa)
    • creación de recursos de k8s
  • usuarios finales

Arquitectura de Kubernetes

Componentes

Responsabilidades del Nodo Maestro

  • Decisiones globales del cluster
  • Detectan y responden a eventos del cluster
  • Sus componentes pueden arrancar en cualquier nodo

Componentes del Nodo Maestro

  • kube api server
  • etcd
  • kube scheduler
  • kube controller manager
    • Node - Replication - Endpoint - Service Account and Token
  • cloud manager
    • Node - Route - Service - Volume

Componentes de los Nodos Trabajadores

Componentes adicionales

  • Redes y Políticas de Red
    • Calico - Flannel - Canal - …
  • Descubrimiento de Servicios
    • CoreDNS
  • Control y Visualización
    • Dashboard
  • Infraestructura
    • KubeVirt

Algunos Recursos del API

Otros

  • ConfigMaps
  • Container
  • Replication Controller
  • Endpoints
  • EndpointSlice
  • Persistent Volume Claim
  • … https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.16/

Algunos Comandos

Instalar Kubernetes

Proveedor de Nube

GCP

$ gcloud config set compute/zone us-west1-a
$ gcloud container clusters create s4n-cluster
$ gcloud auth application-default login

Azure

$ az group create --name=s4n --location=westus
$ az aks create --resource-group=s4n --name=s4n-cluster
$ az aks get-credentials --resource-group=s4n --name=s4n-cluster

AWS

$ eksctl create cluster --name s4n ...

Digital Ocean

$ doctl kubernetes cluster list
$ doctl kubernetes cluster kubeconfig save s4n

Máquina local

minikube

Asegúrese de instalar un hypervisor como virtualbox o kvm.

$ minikube start
$ minikube stop
$ minikube delete

kind

Kubernetes in Docker

$ kind create cluster --wait 5min
$ export KUBECONFIG="$(kind get kubeconfig-path)"
$ kubectl cluster-info
$ kind delete cluster

Máquinas on premise

k3s de Rancher

# On Server
$ curl -sfL https://get.k3s.io | sh -
$ sudo k3s server &
# Kubeconfig is written to /etc/rancher/k3s/k3s.yaml
$ sudo k3s kubectl get nodes

# On Nodes
$ curl -sfL https://get.k3s.io | K3S_URL=https://myserver:6443 K3S_TOKEN=XXX sh -
# On a different node run the below. NODE_TOKEN comes from 
# /var/lib/rancher/k3s/server/node-token on your server
$ sudo k3s agent --server https://myserver:6443 --token ${NODE_TOKEN}

Ansible

Cliente de Kubernetes

$ kubectl version
$ kubectl get componentstatuses
$ kubectl get nodes
$ kubectl describe nodes node-1

Namespaces

  • Organiza objetos en el cluster (como carpetas)
    • si no se configura kubectl este interactúa por defecto con el namespace defaut
    • kube-system: namespace de componentes principales
$ kubectl -n anothernamespace get pods
$ kubectl --all-namespaces get pods

Contexts

  • Cluster o Namespace

  • $HOME/.kube/config

$ kubectl config set-context my-context --namespace=my-namespace
$ kubectl config use-context my-context
  • algunos comandos externos actualizan el archivo $HOME/.kube/config. ¡SEA CONSCIENTE DE ELLO!

Interactuar con Objetos del API de Kubernetes

Describir Objetos del API

$ kubectl get pods
$ kubectl get pods my-pod -o jsonpath --template={.status.podIP}
$ kubectl describe <resource-name> <obj-name>

Crear, Actualizar y Destruir Objetos de K8s

$ kubectl apply -f obj.yaml
$ vi obj.yaml # update some resources
$ kubectl apply --dry-run -f obj.yaml # output the changes without making them
$ kubectl apply -f obj.yaml
$ kubectl edit <resource-name> <obj-name> # after saving it is automatically updated
$ kubectl delete -f obj.yaml
$ kubectl delete <resource-name> <obj-name>

Comandos de Debugging

$ kubectl top nodes
$ kubectl logs <pod-name>
$ kubectl exec -ti exec <pod-name> -- bash
$ kubectl attach -it <pod-name>
$ kubectl cp <pod-name>:</path/to/remote/file> </path/to/local/file>
$ kubectl port-forward <pod-name> 8080:80
  • Se puede hacer port forwarding también con servicios
    • pero las peticiones siempre se envían al mismo Pod aunque hayan varios detrás

kubectl help

$ kubectl help
$ kubectl help | grep kubeconfig
$ kubectl help | less

Siguientes Pasos

Role Based Access Control (RBAC)

  • acceso granular al API de K8s para usuarios y service accounts

K8s Storage Solutions

  • Best practices
  • StatefulSets
  • Ceph

Extending Kubernetes

  • CRDs
  • CNI
  • plugins

HELM

  • Why?
  • What?
  • Usage

Kubernetes as a Service

  • gcp
  • aws
  • azure
  • digital ocean
  • tectonic + Open Shift
  • rancher
  • costs comparison

Kubernetes Ingresses Controllers

  • nginx
  • kong
  • gloo
  • istio
  • skipper
  • traefik

CD Pipelines

  • Jenkins X
  • Spinnaker
  • Tekton

Managing Secrets and Configurations

  • consul integration
  • vault integration

Cloud Native Groups

  • CNCF

  • CDF

Bibliografía y Recursos

Bibliografía

Recursos